Visibility Timeout (sqs)
from Amazon SQS
既定 30s
取り出し後、他のコンシューマから見えなくする時間。処理時間に合わせて設定。
例
code:_
1. app が ReceiveMessage で メッセージ M を取得
この瞬間からタイマー開始(Visibility Timeout, 例: 30秒)
2. その間、他のワーカーから M は「見えない」状態になる
3a. app が処理成功 → DeleteMessage で M を消す
3b. app が DeleteMessage しないまま タイムアウト → M が再び「見える」状態に戻る
4. 別のワーカー(or 同じ app)が再度 ReceiveMessage で M を取得して処理しなおす
つまり 「処理完了」と「メッセージ削除」を切り離してある。これで:
ワーカーがクラッシュしても、メッセージはキューに戻って再処理される
処理時間が長くてもタイムアウト延長で対応できる
ただし 同じメッセージが何度も配信される可能性がある(at-least-once)